// import { Service, Inject } from 'typedi';
// import { AccountNormal, ICustomer, ILedgerEntry } from '@/interfaces';
// import Ledger from '@/services/Accounting/Ledger';

// @Service()
// export class CustomerGLEntries {
//   /**
//    * Retrieves the customer opening balance common entry attributes.
//    * @param {ICustomer} customer
//    */
//   private getCustomerOpeningGLCommonEntry = (customer: ICustomer) => {
//     return {
//       exchangeRate: customer.openingBalanceExchangeRate,
//       currencyCode: customer.currencyCode,

//       transactionType: 'CustomerOpeningBalance',
//       transactionId: customer.id,

//       date: customer.openingBalanceAt,
//       userId: customer.userId,
//       contactId: customer.id,

//       credit: 0,
//       debit: 0,

//       branchId: customer.openingBalanceBranchId,
//     };
//   };

//   /**
//    * Retrieves the customer opening GL credit entry.
//    * @param   {number} ARAccountId
//    * @param   {ICustomer} customer
//    * @returns {ILedgerEntry}
//    */
//   private getCustomerOpeningGLCreditEntry = (
//     ARAccountId: number,
//     customer: ICustomer
//   ): ILedgerEntry => {
//     const commonEntry = this.getCustomerOpeningGLCommonEntry(customer);

//     return {
//       ...commonEntry,
//       credit: 0,
//       debit: customer.localOpeningBalance,
//       accountId: ARAccountId,
//       accountNormal: AccountNormal.DEBIT,
//       index: 1,
//     };
//   };

//   /**
//    * Retrieves the customer opening GL debit entry.
//    * @param   {number} incomeAccountId
//    * @param   {ICustomer} customer
//    * @returns {ILedgerEntry}
//    */
//   private getCustomerOpeningGLDebitEntry = (
//     incomeAccountId: number,
//     customer: ICustomer
//   ): ILedgerEntry => {
//     const commonEntry = this.getCustomerOpeningGLCommonEntry(customer);

//     return {
//       ...commonEntry,
//       credit: customer.localOpeningBalance,
//       debit: 0,
//       accountId: incomeAccountId,
//       accountNormal: AccountNormal.CREDIT,

//       index: 2,
//     };
//   };

//   /**
//    * Retrieves the customer opening GL entries.
//    * @param   {number} ARAccountId
//    * @param   {number} incomeAccountId
//    * @param   {ICustomer} customer
//    * @returns {ILedgerEntry[]}
//    */
//   public getCustomerOpeningGLEntries = (
//     ARAccountId: number,
//     incomeAccountId: number,
//     customer: ICustomer
//   ) => {
//     const debitEntry = this.getCustomerOpeningGLDebitEntry(
//       incomeAccountId,
//       customer
//     );
//     const creditEntry = this.getCustomerOpeningGLCreditEntry(
//       ARAccountId,
//       customer
//     );
//     return [debitEntry, creditEntry];
//   };

//   /**
//    * Retrieves the customer opening balance ledger.
//    * @param   {number} ARAccountId
//    * @param   {number} incomeAccountId
//    * @param   {ICustomer} customer
//    * @returns {ILedger}
//    */
//   public getCustomerOpeningLedger = (
//     ARAccountId: number,
//     incomeAccountId: number,
//     customer: ICustomer
//   ) => {
//     const entries = this.getCustomerOpeningGLEntries(
//       ARAccountId,
//       incomeAccountId,
//       customer
//     );
//     return new Ledger(entries);
//   };
// }
